package cn.com.wxd.biz.website;

import java.util.List;

import cn.com.wxd.entity.website.ArticleInfo;
import cn.com.wxd.common.PageInfo;
import cn.com.wxd.util.dao.QueryParamHeper;
import cn.com.wxd.common.data.KVMap;
import cn.com.wxd.common.data.KeyValue;

/**
 * Title:ArticleService.java
 * Description:cn.com.wxd.biz.article
 * <p>
 * Company: Amumu管理平台
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2015-11-24 下午6:13:00
 *
 * @author WangXuDong
 * @version 1.0
 */
public interface ArticleService {

    /**
     * 根据栏目ID 直接从数据库获取文章列表
     *
     * @param cadi 栏目ID
     *
     * @return
     */
    List<ArticleInfo> getArticlesFromDb(String caid, PageInfo page);

    /**
     * 根据栏目ID 获取文章列表
     *
     * @param cadi 栏目ID
     *
     * @return
     */
    List<ArticleInfo> getArticles(String caid, PageInfo page);

    /**
     * 保存一条文章
     *
     * @param articleInfo 文章对象
     * @param contentText 文章内容的纯文本
     *
     * @return 是否成功
     */
    boolean saveArticle(ArticleInfo articleInfo);

    /**
     * 删除文章
     *
     * @param 文章ID
     *
     * @return
     */
    boolean deleteArticle(String id);

    /**
     * 根据排序号获取文章
     *
     * @param 排序号
     *
     * @return
     */
    ArticleInfo getArticleByOrderId(int OrderId);

    /**
     * 根据文章ID获取文章
     *
     * @param id         文章ID
     * @param isAddClick 是否添加文章点击量
     *
     * @return
     */
    ArticleInfo getArticle(String id, boolean isAddClick);

    /**
     * 根据文章条件获取相关文章
     *
     * @param articleInfo 文章信息
     * @param maxCount    最多返回数量
     *
     * @return 文章
     */
    List<ArticleInfo> getArticle(ArticleInfo articleInfo, int maxCount);

    /**
     * 批量删除文章
     *
     * @param ids 文章ID 使用|分割
     *
     * @return
     */
    boolean batchDeleteA(String ids);

    /**
     * 重建所有文章的索引
     *
     * @return
     */
    boolean reBuildIndex();

    /**
     * 根据文章的索引号，查询文章
     *
     * @param indexIds
     *
     * @return 文章列表
     */
    List<ArticleInfo> getArticleByIndexId(String[] indexIds);

    /**
     * 文章排序
     *
     * @param newOrderId 新的排序号
     * @param oldOrderId 旧的排序号
     *
     * @return 排序是否成功
     */
    boolean rankArticle(String newOrderId, String oldOrderId);

    /**
     * 搜索文章，
     *
     * @param searchType    搜索类型，DB为数据库，IN为索引
     * @param searchKeyWord 关键字 key为属性名，value为关键字
     * @param page          分页信息
     *
     * @return 文章列表
     */
    List<ArticleInfo> searchArticle(String searchType,
                                    KeyValue<String, String> searchKeyWord, PageInfo page);

    /**
     * 获取文章数量
     *
     * @return
     */
    int getArtirlCount();

    /**
     * 批量更新文章的栏目
     *
     * @param ids  文章ID字符串用/隔开
     * @param caid 栏目号
     *
     * @return 是否成功
     */
    boolean moveArticle(String ids, String caid);

    /**
     * 批量复制文章
     *
     * @param ids  文章ID字符串用/隔开
     * @param caid 栏目号
     *
     * @return 是否成功
     */
    boolean cloneArticle(String ids, String caid);

    /**
     * 批量查询文章
     *
     * @param 查询辅助类型的对象列表
     *
     * @return 返回查询数据 key查询名称，查询到的数据。
     */
    KVMap<String, List<ArticleInfo>> batchQueryArticle(List<QueryParamHeper> listqph);

    /**
     * @param param    类型参数key 字段，value 数据
     * @param page     分页对象
     * @param isFizz   是否模糊查询
     * @param order    排序方式ｄｅｓｃ　　　ａｓｃ
     * @param orderStr 　排序字段
     *
     * @return　文章列表
     */
    List<ArticleInfo> getArticleByParam(KVMap<String, Object> param, KVMap<String, String> order,
                                        List<String> fuzzField, PageInfo page);

    /**
     * 获取下一篇文章
     *
     * @param orderId 文章排序号
     * @param caid    栏目号
     *
     * @return
     */
    ArticleInfo getNextArt(int orderId, int caid);

    /**
     * 获取上一篇文章
     *
     * @param orderId 文章排序号
     * @param caid    栏目号
     *
     * @return
     */
    ArticleInfo getPrevArt(int orderId, int caid);
}
